package com.example.demonov21th.dao;

import com.example.demonov21th.User;

import java.sql.*;

public class DBUtil {
    /**
     * 数据库驱动加载
     */
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 检索数据库连接。
     * <p>
     * 此方法使用预定义的 URL、用户名和密码建立与数据库的连接。
     * 如果连接尝试失败，它会记录错误，在这种情况下返回 null。
     *
     * @return 表示数据库连接的 {@link Connection} 对象，如果连接失败，则为 null。
     */
    private static Connection getConn() {
        String url = "jdbc:mysql://localhost:3306/webdb";
        String user = "root";
        String password = "123456";
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static ResultSet getUserData(
            String sql, Object... objects
    ) {
        Connection conn = getConn();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(
                    sql
            );
            for (
                    int i = 0;
                    i < objects.length;
                    i++
            ) {
                ps.setObject(
                        i + 1,
                        objects[i]
                );
            }
            rs = ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    public static User getUser(
            String sql,
            Object... objects
    ) {
        ResultSet rs = getUserData(
                sql,
                objects
        );
        User u = null;
        try {
            while (
                    rs.next()
            ) {
                u = new User(
                        rs.getString("username"),
                        rs.getString("password")
                );
            }
            return u;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}
